package com.atguigu.aclservice.util;

import com.atguigu.aclservice.entity.Menu;
import com.atguigu.aclservice.entity.vo.MetaVo;
import com.atguigu.aclservice.entity.vo.RouterVo;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;

/**
 *根据菜单数据构建路由的工具类
 */
public class RouterHelper {

    /**
     * 根据菜单构建路由
     * @param menus
     * @return
     */
    public static List<RouterVo> buildRouters(List<Menu> menus) {
        List<RouterVo> routers = new LinkedList<RouterVo>();
        for (Menu menu : menus) {
            RouterVo router = new RouterVo();
            router.setHidden(false);
            router.setAlwaysShow(false);
            router.setPath(getRouterPath(menu));
            router.setComponent(menu.getComponent());
            router.setMeta(new MetaVo(menu.getName(), menu.getIcon()));
            List<Menu> children = menu.getChildren();
            //如果当前是菜单，需将按钮对应的路由加载出来，如：“角色授权”按钮对应的路由在“系统管理”下面
            if(menu.getHidden()==1) {
/*
                List<Menu> hiddenMenuList = children.stream().filter(item -> !StringUtils.isEmpty(item.getComponent()) && item.getType()==2).collect(Collectors.toList());
*/
                RouterVo hiddenRouter = new RouterVo();
                hiddenRouter.setHidden(true);
                hiddenRouter.setAlwaysShow(false);
                hiddenRouter.setPath(getRouterPath(menu));
                hiddenRouter.setComponent(menu.getComponent());
                hiddenRouter.setMeta(new MetaVo(menu.getName(), menu.getIcon()));
                routers.add(hiddenRouter);

            } else if (menu.getType()==0||menu.getLevel()==1){
                System.out.println(children.toString());
                if (children.size()>0) {

                    router.setAlwaysShow(true);

                    router.setChildren(buildRouters(children));
                }
                routers.add(router);
            } else {
                routers.add(router);
            }

        }
        return routers;
    }

    /**
     * 获取路由地址
     *
     * @param menu 菜单信息
     * @return 路由地址
     */
    public static String getRouterPath(Menu menu) {
        String routerPath = "/" + menu.getPath();
        if(menu.getParentId().intValue() != 0) {
            routerPath = menu.getPath();
        }
        return routerPath;
    }
}
